package com.zelin.dao.dyna;

import com.zelin.dao.UserDao;
import com.zelin.dao.impl.UserDaoImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class UserDaoJDKDynamicProxyImpl implements InvocationHandler {
    //引入目标对象
    private UserDao userDao;
    public UserDaoJDKDynamicProxyImpl(){
        userDao = new UserDaoImpl();
    }
    //2. 生成代理对象
    public UserDao createUserDao(){
        return (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),
                userDao.getClass().getInterfaces(),this);
    }
    //3. 调用目标对象的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //得到方法名
        String name = method.getName();
        //判断当前调用的方法名是否是query，如果是就添加一个checkSecurity()方法的调用
        if (name.equalsIgnoreCase("query")){
            checkSecurity();
        }
        Object invoke = method.invoke(userDao,args);
        return invoke;
    }

    private void checkSecurity() {
        System.out.println("这是使用JDK的动态代理方式来检查安全性!!!!!");
    }
}
